#ifndef MATCHING_H
#define MATCHING_H

#include <stdint.h>
#include <stdbool.h>

// 相似度阈值
#define SIMILARITY_THRESHOLD 0.7

// LCS矩阵结构
typedef struct {
    uint32_t** matrix;
    uint32_t rows;
    uint32_t cols;
} LCSMatrix;

// 匹配结果
typedef struct {
    bool matched;
    int template_index;
    double similarity;
    char* matched_template;
} MatchResult;

// 初始化LCS矩阵
LCSMatrix* lcs_matrix_init(uint32_t rows, uint32_t cols);

// 释放LCS矩阵
void lcs_matrix_free(LCSMatrix* matrix);

// 计算两个token序列的最长公共子序列长度
uint32_t lcs_length(const char** seq1, uint32_t len1, const char** seq2, uint32_t len2);

// 计算两个token序列的相似度
double calculate_similarity(const char** tokens1, uint32_t len1, const char** tokens2, uint32_t len2);

// 在模板组中查找匹配的模板
MatchResult find_matching_template(const char** tokens, uint32_t token_count, 
                                  const char* group_key, void* template_group);

// 提取LCS序列（用于调试）
void extract_lcs_sequence(const char** seq1, uint32_t len1, const char** seq2, uint32_t len2, 
                          char*** result, uint32_t* result_len);

#endif // MATCHING_H